﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Knights.Objeto.Articulos
{
    class Equipo
    {
        private Ninguno ninguno = new Ninguno();

        private ListaArticulos articulos;
        private Dictionary<Categoria, IArticulo> equipo;

        public Equipo(ListaArticulos articulos)
        {
            this.articulos = articulos;
            equipo = new Dictionary<Categoria, IArticulo>();

            Inicializar();
        }

        private void Inicializar()
        {
            equipo.Add(Categoria.Casco, ninguno);
            equipo.Add(Categoria.Hombreras, ninguno);
            equipo.Add(Categoria.Pechera, ninguno);
            equipo.Add(Categoria.Guantes, ninguno);
            equipo.Add(Categoria.Cinturon, ninguno);
            equipo.Add(Categoria.Botas, ninguno);
            equipo.Add(Categoria.Escudo, ninguno);
            equipo.Add(Categoria.Espada, ninguno);
        }

        public void EquiparArticulo(IArticulo articulo)
        {
            if (EsArticuloEquipable(articulo))
            {
                DesequiparArticulo(articulo.Categoria);
                equipo[articulo.Categoria] = articulo;
                articulos.RemoverArticulo(articulo);
            }
        }

        public void DesequiparArticulo(Categoria categoria)
        {
            articulos.AgregarArticulo(equipo[categoria]);
            equipo[categoria] = ninguno;
        }

        private bool EsArticuloEquipable(IArticulo articulo)
        {
            List<Categoria> categoriasEquipables = equipo.Keys.ToList();

            if (categoriasEquipables.Contains(articulo.Categoria))
                return true;
            else
                return false;
        }

        public int Armadura
        {
            get
            {
                int armadura = equipo[Categoria.Casco].Valor;
                armadura += equipo[Categoria.Hombreras].Valor;
                armadura += equipo[Categoria.Pechera].Valor;
                armadura += equipo[Categoria.Guantes].Valor;
                armadura += equipo[Categoria.Cinturon].Valor;
                armadura += equipo[Categoria.Botas].Valor;
                return armadura;
            }
        }

        public int Resistencia { get { return equipo[Categoria.Escudo].Valor; } }

        public int Danio { get { return equipo[Categoria.Espada].Valor; } }
    }
}
